<?php
/**
 * Created by PhpStorm.
 * User: xudongsheng
 * Date: 2017/9/12
 * Time: 下午9:15
 */

namespace app\admin\controller;
use app\admin\model\Article as articleModel;
use app\admin\model\Column;
use Category\Category;
use think\Request;

class Article extends Common
{
    /** 文章 列表
     * @param $column_id
     * @return mixed
     */
    public function lists($column_id){
        // 过滤 传过来的 column_id
        ($current = Column::get($column_id) AND $current['type'] != Column::LINKS_TYPE)
        OR $this->error('不存在此栏目或此栏目无法展示！');
        // 查 当前 分类的 面包屑  求所有父级分类
        $this->assign('parents',Column::init()->crumbs($column_id));
        // 子栏目
        $childColumn = Column::init()->classAChild($column_id);
        $this->assign('childColumn',$childColumn);
        // 根据 所有子栏目id  查 属于这些栏目的 文章
        $articleList =   articleModel::with('column_model')
                                  ->where(['column_id'=>['in',Column::init()->getChildsId($column_id)]])
                                  ->where('recycle',0)
                                  ->field('article_id,column_id,click,create_time,title,sort,release_time')
                                  ->order('sort','desc')
                                  ->paginate(15);
        $this->assign('articleList',$articleList);
        $this->assign('column_id',$column_id);
        return $this->fetch();
    }

    /** 新新建文章
     * @param $column_id
     * @return mixed
     */
    public function createArticle(Request $request,$column_id){
        ($current = Column::get($column_id)) OR $this->error('不存在此栏目！');
        $request->isPost() AND $this->saveArticle();

        //BUG 要把 子栏目 单页 模型的 过滤掉  必须按照 模型来进行 过滤
        $column  = Column::init()->getchilds($column_id);
        $this->assign('column',$column);
        $this->assign('current',$current);
        return $this->fetch();
    }

    /**
     * 新建文章
     */
    private function saveArticle(){
        // 表单 验证..... 此处省略代码 一万行....
        $data   =   input('post.');
        //发布时间
        $data['release_time'] = $data['release_time']?:date('Y-m-d');
        if (articleModel::create($data,true)){
            $this->success('新增成功！',url('article/lists',['column_id'=>$data['column_id']]));
        }
        $this->error('新增失败！');
    }

    /** 更新 文章 之 显示模板
     * @param $article_id
     * @return mixed
     */
    public function editArticle(Request $request,$article_id){
        ($article = articleModel::get($article_id)) OR $this->error('此文章不存在！');
        $request->isPost()  AND $this->updateArticle($article);
        $column  = Column::init()->getchilds($article->column_id);
        $this->assign('column',$column);
        $this->assign('article',$article);
        return $this->fetch();
    }

    /** 更新文章 之 保存
     * @param $article_id
     */
    private function updateArticle($article){
        //  表单 验证..... 此处省略代码 一万行....
//        ($article = articleModel::get($article_id)) OR $this->error('此文章不存在,无法更新！');
        if ($article->isUpdate()->allowField(true)->save(input('post.'))){
            $this->success('栏目'.$article->title.'更新成功！',url('article/lists',['column_id'=>$article->column_id]));
        }
        $this->error('栏目'.$article->title.'更新失败！');
    }

    /** 文章删除
     * @param $article_id
     */
    public function deleteArticle($article_id){
        ($article = articleModel::get($article_id)) OR $this->error('此文章不存在,无法删除！');
        if (is_string($article_id)){
            $article_id =  explode(',',$article_id);
        }
        $error =    [];
        articleModel::startTrans();
        foreach ($article_id as $v){
            $error[] =  articleModel::update([
                'article_id'    =>  (int)$v,
                'recycle'       =>  1
            ]);
        }
        if (in_array(false,$error,true)){
            articleModel::rollback();
            $this->error('删除失败！');
        }
        articleModel::commit();
        $this->success('删除成功！');
    }

    /** 批量 排序
     * @param $sort
     */
    public function articleSort($sort){
        (!is_array($sort) OR empty($sort)) AND $this->error('没有要排序项！');
        foreach ($sort as $k=>$v){
            articleModel::update([
                'article_id'  =>  (int)$k,
                'sort'       =>  (int)$v
            ]);
        }
        $this->success('已排序~');
    }

    /** 移动文章
     * @param $article_id
     * @return mixed
     */
    public function move(Request $request,$article_id){
        $request->isPost() AND $this->moveSave();
        (!is_array($article_id) OR empty($article_id)) AND $this->error('错误或没有相关数据！');
        $column  = Column::init()->modelNameByColumn();
        $this->assign('article_id',implode(',',$article_id));
        $this->assign('column',$column);
        return $this->fetch();
    }

    /**
     * 移动保存
     */
    private function moveSave(){
        if (!(($article_id =   input('post.article_id')) AND !empty(($article = explode(',',$article_id))))){
            $this->error('没有要移动的文章！');
        }
        column::get(($column_id = input('column_id'))) OR $this->error('要移动的栏目不存在！');
        foreach ($article as $v){
            articleModel::update([
                'article_id'  =>  (int)$v,
                'column_id'   =>  (int)$column_id
            ]);
        }
        $this->success('已移动~',url('article/lists',['column_id'=>$column_id]));
    }

    /** 回收站
     * @param $column_id
     * @return mixed
     */
    public function recycleBin($column_id){
        // 过滤 传过来的 column_id
        ($current = Column::get($column_id) AND $current['type'] != Column::LINKS_TYPE)
        OR $this->error('不存在此栏目或此栏目无法展示！');
        // 查 当前 分类的 面包屑  求所有父级分类
        $parents    =   Column::init()->crumbs($column_id);
        $this->assign('parents',$parents);
        $childColumnItem = Column::init()->classAChild($column_id);
        $this->assign('childColumn',$childColumnItem);
        // 获取 子栏目 id
        $childColumn = Column::init()->getChildsId($column_id);
        // 获取父栏目 id
        $parents_id =   [];
        foreach ($parents as $v){
            $parents_id[]   =   $v['column_id'];
        }
        // 合并 子父 id
        $parents_id =  array_unique(array_merge($parents_id,$childColumn));
        // 查询 这些 文章 id的 status = 1 的
        $article    =   articleModel::where('recycle',1)
                        ->where(['column_id'=>['in',$parents_id]])
                        ->select();
        $this->assign('article',$article);
        $this->assign('column_id',$column_id);
        return $this->fetch();
    }

    /** 还原
     * @param $article_id
     */
    public function reduction($article_id){
        if (is_string($article_id)){
            $tmp    =   [];
            array_push($tmp,$article_id);
            $article_id =  $tmp;
        }
        $error =    [];
        articleModel::startTrans();
        foreach ($article_id as $v){
            $error[] =  articleModel::update([
                'article_id'  =>  (int)$v,
                'recycle'   =>  0
            ]);
        }
        if (in_array(false,$error,true)){
            articleModel::rollback();
            $this->error('还原失败！');
        }
        articleModel::commit();
        $this->success('还原成功！');
    }

    /** 真正删除
     * @param $article_id
     */
    public function realDelete($article_id){
        if (articleModel::destroy($article_id)){
            $this->success('删除成功！');
        }
        $this->error('删除失败！');
    }



}